perm filename EDGES.SAI[PIC,HE] blob sn#430324 filedate 1979-04-03 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY XAXIS,YAXIS
C00003 00003	INTERNAL SIMPLE PROCEDURE XAXIS(INTEGER OBUF,CURBUF,THR,NOISE)
C00005 00004	INTERNAL PROCEDURE YAXIS(INTEGER OBUF,CURBUF,THR,NOISE)
C00007 00005	END "EDGES"
C00008 ENDMK
C⊗;
ENTRY XAXIS,YAXIS;
BEGIN "EDGES"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC.SAI" SOURCE!FILE;
INTERNAL SIMPLE PROCEDURE XAXIS(INTEGER OBUF,CURBUF,THR,NOISE);
    BEGIN "XAXIS"
    INTEGER I,J,VAL,COORD,LEVEL,NV,LV,ISTOP,JSTOP,IPTR;
    BOOLEAN STATE;

    NV←0;
    STATE←TRUE;
    VAL←0;
    ISTOP←ROWS(OBUF);  JSTOP←COLMS(OBUF);

    FOR I←1 THRU ISTOP DO
	BEGIN
	IPTR←INPTR(I,1,OBUF);
	FOR J←1 THRU JSTOP DO
	    BEGIN "COMP"
	    LV←NV;
	    NV←ILDB(IPTR);
	    IF STATE THEN
		IF NV<LV THEN 
		    BEGIN
		    IF (VAL-NV)>NOISE THEN
			BEGIN
			STATE←FALSE;
			IF VAL>THR THEN PUTPNT(I,COORD+LEVEL%2,VAL,CURBUF);
			LEVEL←0;
			END
		    END
		ELSE IF NV>LV THEN
		    BEGIN
		    COORD←J;
		    VAL←NV;
		    LEVEL←0;
		    END
		ELSE LEVEL←LEVEL+1
	    ELSE IF NV>LV THEN
		BEGIN
		STATE←TRUE;
		COORD←J;
		VAL←NV;
		END;
	    END "COMP";
	ROWCHK(CHKROW,ROWS,I,50);
	END;
    END "XAXIS";

INTERNAL PROCEDURE YAXIS(INTEGER OBUF,CURBUF,THR,NOISE);
    BEGIN "YAXIS"
    INTEGER I,J,NV,LV,ISTOP,JSTOP,VAL1,IPTR;

ISTOP←ROWS(OBUF);   JSTOP←COLMS(OBUF);

BEGIN
    SAFE INTEGER ARRAY VAL,COORD,OVAL,LEVEL [1:JSTOP];
    SAFE BOOLEAN ARRAY STATE [1:JSTOP];

    FOR J←1 THRU JSTOP DO
	BEGIN
	STATE[J]←TRUE;
	VAL[J]←COORD[J]←OVAL[J]←LEVEL[J]←0;
	END;

    FOR I←1 THRU ISTOP DO
	BEGIN
	IPTR←INPTR(I,1,OBUF);
	FOR J←1 THRU JSTOP DO
	    BEGIN "CALC"
	    LV←OVAL[J];
	    NV←ILDB(IPTR);
	    OVAL[J]←NV;
	    IF STATE[J] THEN
		IF NV<LV THEN 
		    BEGIN
		    IF (VAL[J]-NV)>NOISE THEN
			BEGIN
			STATE[J]←FALSE;
			IF VAL[J]>THR THEN PUTPNT(VAL1←(COORD[J]+LEVEL[J]%2),J,VAL[J],CURBUF);
			LEVEL[J]←0;
			END
		    END
		ELSE IF NV>LV THEN
		    BEGIN
		    COORD[J]←I;
		    VAL[J]←NV;
		    LEVEL[J]←0;
		    END
		ELSE LEVEL[J]←LEVEL[J]+1
	    ELSE IF NV>LV THEN
		BEGIN
		STATE[J]←TRUE;
		COORD[J]←I;
		VAL[J]←NV;
		END;
	    END "CALC";
	ROWCHK(CHKROW,ROWS,I,50);
	END;
END;
    END "YAXIS";
END "EDGES"